//
//  STKeyFrameViewController.swift
//  frameAndGroupAnimationSwift
//
//  Created by Stan on 2017-02-15.
//  Copyright © 2017 stan. All rights reserved.
//

import UIKit

class STKeyFrameViewController: UIViewController {
    
    @IBOutlet var orangeView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //---------------step3:添加动画到要作用的layer上
        //在橙色的View添加抖动的动画。重要事情说三遍：动画一定要加载layer上！动画一定要加载layer上！动画一定要加载layer上！
        orangeView.layer.add(self.shakeSquare(), forKey: nil)
        
        
        //将小飞机添加到视图上
        view.addSubview(planeImageView)
        
        //设置小飞机的位置
        planeImageView.center = view.center
        
        //        为小飞机同时添加抖动的动画和椭圆路径旋转的动画
        planeImageView.layer.add(self.shakeSquare(), forKey: nil)
        planeImageView.layer.add(self.shakeOval(), forKey: nil)
        
    }
    
    
    //    懒加载一个放了飞机图片的imageView
    lazy var planeImageView: UIImageView = {
        let iv = UIImageView(image: UIImage(named: "hero1"))
        
        iv.backgroundColor = UIColor.white
        return iv
    }()
    
    
    
}

//MARK: - 抖动的动画
extension STKeyFrameViewController{
   fileprivate func shakeSquare() -> (CAKeyframeAnimation){
        //---------------step1:创建关键帧动画对象
        let shakeAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z")
        //---------------step2:设置动画属性
        //        让动画先左旋转-M_PI_4 / 5，再右旋转同样的度数，再左旋转。这样就动起来了
        shakeAnimation.values = [-M_PI_4 / 5 ,M_PI_4 / 5 ,-M_PI_4 / 5 ]
        //        设置动画重复次数
        shakeAnimation.repeatCount = MAXFLOAT
        
        return shakeAnimation
    }
}

//MARK: - 走椭圆形状的动画
extension STKeyFrameViewController{
    fileprivate func shakeOval() -> (CAKeyframeAnimation){
        
        //        创建关键帧动画对象。按照指定的路径进行移动，所以需要设置为position
        let shakeOvalAnimation = CAKeyframeAnimation(keyPath: "position")
        
        //        创建一个椭圆的beziperPath
        let ovalPath = UIBezierPath.init(ovalIn: CGRect(x: 100, y: 100, width: 200, height: 500))
        
        //        把路径添加到动画上
        shakeOvalAnimation.path = ovalPath.cgPath
        
        //        动画播放时长
        shakeOvalAnimation.duration = 4
        //        动画重复次数
        shakeOvalAnimation.repeatCount = MAXFLOAT
        
        //        动画的计算模式
        shakeOvalAnimation.calculationMode = kCAAnimationPaced
        //        动画是否沿着路径旋转
        shakeOvalAnimation.rotationMode = kCAAnimationRotateAutoReverse
        
        
        return shakeOvalAnimation
    }
    
}
